package com.shou.domain.park.repository;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.shou.domain.common.PageQueryEntity;
import com.shou.domain.park.model.ParkingRecordEntity;
import com.shou.domain.park.model.ParkingRecordEntity;

import java.math.BigDecimal;
import java.util.List;

/**
* @author Nemo
* @description 针对表【parkingrecords(停车记录表，记录车辆的进出信息)】的数据库操作Service
* @createDate 2025-02-07 22:10:51
*/
public interface IParkingRecordRepository {
    /**
     * 增加停车场
     * @param parkingRecord 停车场对象
     */
    void insert(ParkingRecordEntity parkingRecord);

    /**
     * 更新停车场
     * @param parkingRecord 停车场对象
     */
    void updateParkingRecordById(ParkingRecordEntity parkingRecord);

    /**
     * 根据ID查询停车场
     * @param id 停车场ID
     * @return 停车场对象
     */
    ParkingRecordEntity getParkingRecordById(Integer id);

    /**
     * 分页查询停车场
     * @return 分页结果
     */
    IPage<ParkingRecordEntity> getParkingRecordsPage(PageQueryEntity pageQueryEntity);

    /**
     * 根据停车场编号和时间单位段获取入场次数
     */
    Long getInCountsByTimeRanges(String lotCode, String startTime, String endTime);

    /**
     * 根据停车场编号和时间单位段获取出场次数
     */
    Long getOutCountsByTimeRanges(String lotCode, String startTime, String endTime);

    /**
     * 根据停车场编号和时间单位段获取车位使用数
     * @param lotCode
     */
    Long getOccupancyCount(String lotCode, String startTime, String endTime);

    /**
     * 根据停车场编号和时间单位段获取总收入
     */
    BigDecimal getTotalIncomeByCodeAndStartTime(String lotCode, String startTime, String endTime);
}
